package lode

import "time"

type Image interface {
	Mount() (string, error)
	Unmount() error
	Register()
	UnRegister()
	Rename(name string)
	MountPoint() string

	Config() BaseImageConfig
	GetName() string
	GetID() string
	GetCounter() int32
	GetCreateTime() time.Time

	Export(string) error
}

type BaseImage struct {
	Created time.Time		// 创建时间
	Architecture string 	// 架构，取值为$GOARCH，当前应支持386，amd64，arm，arm64
	Os string				// 运行镜像所需要的操作系统，当前仅支持linux
	Config BaseImageConfig	// 配置信息
	Rootfs []string			// layer的id，从第一层到最后一层
}

type BaseImageConfig struct {
	User string 					// 运行程序时的用户
	ExposedPorts MapInterfaceType	// 格式为port/tcp, port/udp, port，只写端口时默认为tcp
	Env []string					// 默认环境变量
	Entrypoint []string				// 入口点
	Cmd []string 					// 运行entrypoint时的默认参数，如果未设置entrypoint则第一个值被作为运行的程序
	Volumes MapInterfaceType		// 卷的挂载点
	WorkingDir string				// 执行entrypoint时的工作目录
	StopSignal string				// 要停止容器时往容器内发送的信号
}

type MapInterfaceType map[string]interface{}

func (image *BaseImage) AppendLayer(layerId string) {
	image.Rootfs = append(image.Rootfs, layerId)
}

//TODO  简单的传递信息，需要error的详细分类定义
type CustomizeError struct {
	Message string 		//未找到信息
}

func (err CustomizeError) Error() string {
	return err.Message
}

